home *** CD-ROM | disk | FTP | other *** search
- /* mods 871211,22 for HyperCard XFCN work -- remove <stdio> stuff and
- * go to the Mac toolbox and HC system ... ^z
- */
-
- /* file "merge_utils.c" ... 870902-... ^z
- * misc. utilities for the merge_indices functions...
- */
-
- #include "buildIndex.1.h"
-
- /* function to open an input key file for this generation and file number ...
- * note the limitation to no more than 9 generations, which with a 4-way
- * merge should be more than enough for a few years to come! Note that
- * this function should return 0 and not give up if it attempts to open
- * a nonexistent file -- that's the signal for merge_indices() to know
- * that all of the input files have been used up....
- */
-
- int open_inkfile (file_num, vRef0, generation_number)
- int file_num, vRef0, generation_number;
- {
- Str255 fname;
- int i;
-
- fname[1] = 'z';
- fname[2] = generation_number + '0';
- fname[3] = 'k';
- i = putNum ((char *)fname + 4, file_num);
- fname[0] = i + 3;
-
- if (FSOpen (fname, vRef0, &i) != noErr)
- return (NULL);
-
- return (i);
- }
-
-
- /* function to open an input ptr file for this generation and file number
- */
-
- int open_inpfile (file_num, vRef0, generation_number)
- int file_num, vRef0, generation_number;
- {
- Str255 fname;
- int i;
-
- fname[1] = 'z';
- fname[2] = generation_number + '0';
- fname[3] = 'p';
- i = putNum ((char *)fname + 4, file_num);
- fname[0] = i + 3;
-
- if (FSOpen (fname, vRef0, &i) != noErr)
- return (NULL);
-
- return (i);
- }
-
-
- /* function to open an output key file for this generation and file number
- */
-
- int open_outkfile (vRef0, generation_number, file_number)
- int vRef0, generation_number, file_number;
- {
- Str255 fname;
- int i;
-
- fname[1] = 'z';
- fname[2] = generation_number + 1 + '0';
- fname[3] = 'k';
- i = putNum ((char *)fname + 4, file_number / NMERGE);
- fname[0] = i + 3;
- if (Create (fname, vRef0, '????', 'CTLZ') != noErr)
- {
- give_msg ("\pSorry, fatal error creating merge key file -- click mouse to exit, then reboot!");
- beepWait ();
- RestoreA4();
- ExitToShell ();
- }
-
- if (FSOpen (fname, vRef0, &i) != noErr)
- {
- give_msg ("\pSorry, fatal error opening merge key file -- click mouse to exit, then reboot!");
- beepWait ();
- RestoreA4();
- ExitToShell ();
- }
-
- return (i);
- }
-
-
- /* function to open an output ptr file for this generation and file number
- */
-
- int open_outpfile (vRef0, generation_number, file_number)
- int vRef0, generation_number, file_number;
- {
- Str255 fname;
- int i;
-
- fname[1] = 'z';
- fname[2] = generation_number + 1 + '0';
- fname[3] = 'p';
- i = putNum ((char *)fname + 4, file_number / NMERGE);
- fname[0] = i + 3;
- if (Create (fname, vRef0, '????', 'CTLZ') != noErr)
- {
- give_msg ("\pSorry, fatal error creating merge ptr file -- click mouse to exit, then reboot!");
- beepWait ();
- RestoreA4();
- ExitToShell ();
- }
-
- if (FSOpen (fname, vRef0, &i) != noErr)
- {
- give_msg ("\pSorry, fatal error opening merge ptr file -- click mouse to exit, then reboot!");
- beepWait ();
- RestoreA4();
- ExitToShell ();
- }
-
- return (i);
- }
-
-
- /* function to rename the remaining last unpaired key file & ptr file
- * from one generation to the next...
- */
-
- void fix_oddball_file_name (vRef0, generation_number, file_number)
- int vRef0, generation_number, file_number;
- {
- Str255 oldname, newname;
- int i;
-
- oldname[1] = 'z';
- oldname[2] = generation_number + '0';
- oldname[3] = 'k';
- i = putNum ((char *)oldname + 4, file_number);
- oldname[0] = i + 3;
-
- newname[1] = 'z';
- newname[2] = generation_number + 1 + '0';
- newname[3] = 'k';
- i = putNum ((char *)newname + 4, file_number / NMERGE);
- newname[0] = i + 3;
-
- if (Rename (oldname, vRef0, newname) != noErr)
- {
- give_msg ("\pSorry, error renaming merge key file ... click mouse to continue");
- beepWait ();
- }
-
- oldname[1] = 'z';
- oldname[2] = generation_number + '0';
- oldname[3] = 'p';
- i = putNum ((char *)oldname + 4, file_number);
- oldname[0] = i + 3;
-
- newname[1] = 'z';
- newname[2] = generation_number + 1 + '0';
- newname[3] = 'p';
- i = putNum ((char *)newname + 4, file_number / NMERGE);
- newname[0] = i + 3;
-
- if (Rename (oldname, vRef0, newname) != noErr)
- {
- give_msg ("\pSorry, error renaming merge ptr file ... click mouse to continue");
- beepWait ();
- }
-
- return;
- }
-
-
- /* function to give the final key and ptr files their proper ultimate
- * names ... ok for it to mess with doc_filename string....
- */
-
- void fix_final_file_names (doc_filename, vRef0, generation_number)
- Str255 doc_filename;
- int vRef0, generation_number;
- {
- Str255 oldname;
-
- oldname[0] = 4;
- oldname[1] = 'z';
- oldname[2] = generation_number + '0';
- oldname[3] = 'k';
- oldname[4] = '0';
-
- doc_filename[++doc_filename[0]] = '.';
- doc_filename[++doc_filename[0]] = 'k';
-
- if (Rename (oldname, vRef0, doc_filename) != noErr)
- {
- give_msg ("\pSorry, error renaming final key file ... click mouse to continue");
- beepWait ();
- }
-
- oldname[3] = 'p';
- doc_filename[doc_filename[0]] = 'p';
-
- if (Rename (oldname, vRef0, doc_filename) != noErr)
- {
- give_msg ("\pSorry, error renaming final ptr file ... click mouse to continue");
- beepWait ();
- }
-
- return;
- }
-
-
- /* function to get rid of the superfluous k & p files now that they
- * have been merged into the next generation....
- */
-
- void remove_used_infiles (n, vRef0, generation_number, file_number)
- int n, vRef0, generation_number, file_number;
- {
- Str255 fname;
- int i, j;
-
- fname[1] = 'z';
- fname[2] = generation_number + '0';
- for (i = 0; i < n; ++i)
- {
- fname[3] = 'k';
- j = putNum ((char *)fname + 4, file_number + i);
- fname[0] = j + 3;
-
- if (FSDelete (fname, vRef0) != noErr)
- {
- give_msg ("\pSorry, error deletin merge key file ... click mouse to continue");
- beepWait ();
- }
-
- fname[3] = 'p';
- if (FSDelete (fname, vRef0) != noErr)
- {
- give_msg ("\pSorry, error deletin merge ptr file ... click mouse to continue");
- beepWait ();
- }
- }
-
- return;
- }
-
-
- /* function to close out the ink and inp files that have been opened...
- */
-
- void close_infiles (ink, inp, n)
- int ink[], inp[];
- int n;
- {
- int i;
-
- for (i = 0; i < n; ++i)
- {
- FSClose (ink[i]);
- FSClose (inp[i]);
- }
- }
-
-
-